/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package frontera.dao;

import control.SIRHApp;
import entidad.Usuario;
import javax.persistence.EntityManager;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

/**
 *
 * @author tuareg
 */
public class UsuarioDAO  extends DAO<Usuario>{

	public UsuarioDAO(String nombreEntidad) {
		super(nombreEntidad);
	}

	public UsuarioDAO() {
		this("Usuario");
	}
        
        @Override 
        public boolean eliminar(Usuario nuevaEntidad) {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		boolean ret = false;
                Usuario usuario = null;

                Query q = em.createQuery(   "SELECT e FROM Usuario e " +
                                            "WHERE e.nombre LIKE :NOMBRE")
                                            .setParameter("NOMBRE", nuevaEntidad.getNombre());
                try {                       
                    usuario = (Usuario)q.getSingleResult();
                } catch (NonUniqueResultException e) {
                    usuario = (Usuario)q.getResultList().get(0);
                } catch (Exception e){
                    e.printStackTrace();
                }
		try {
			em.remove(usuario);
			em.getTransaction().commit();
			ret = true;
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
			return ret;
		}
	}
        
	@Override
	public boolean actualizar(Usuario viejaEntidad, Usuario nuevaEntidad) {
		EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            boolean ret= false;
            try {
                viejaEntidad = leer(viejaEntidad);
                viejaEntidad.setNombre(nuevaEntidad.getNombre());
                viejaEntidad.setContraseña(nuevaEntidad.getContraseña());
                viejaEntidad.setEmpleadoAsociado(nuevaEntidad.getEmpleadoAsociado());
                em.merge(viejaEntidad);
                em.getTransaction().commit();
                ret = true;
            } catch (Exception e) {
                em.getTransaction().rollback();
            } finally {
                em.close();
                return ret;
            }
	}

    @Override
        public boolean  crear(Usuario nuevaentidad){
        boolean retorno = false;
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        	try {
			em.persist(nuevaentidad);
			em.getTransaction().commit();
			retorno = true;
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
			return retorno;
		}
        }
      public Usuario leer(Usuario par) {
            EntityManager em = emf.createEntityManager();
            Usuario usuario = null;

            Query q = em.createQuery(   "SELECT e FROM Usuario e " +
                                        "WHERE e.nombre LIKE :NOMBRE")
                                        .setParameter("NOMBRE", par.getNombre());
            try {                       
                usuario = (Usuario)q.getSingleResult();
            } catch (NonUniqueResultException e) {
                usuario = (Usuario)q.getResultList().get(0);
            } catch (Exception e){
                e.printStackTrace();
            }finally {
                em.close();
                return usuario;
            }
        }
	  
}
